package gest;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.util.Scanner;
import java.util.StringTokenizer;

public class CriarFarmacias {
	static Scanner in = new Scanner (System.in);
	static Registry reg;
	static Gestao g = null;
	static Farmacia f;
	String ficheiro;
	
	public CriarFarmacias(){
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g= new Gestao_Impl();		
	}
	
	public CriarFarmacias(int licenca, String nome, String mor, int nif){
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g = new Gestao_Impl();
		try {
			f = g.cria_farmacia(licenca);
			f.set_nome(nome);
			f.set_morada(mor);
			f.set_nif(nif);
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
	
	public CriarFarmacias(String nomeficheiro) throws IOException{
		try {
			reg = LocateRegistry.getRegistry();
			g = (Gestao) reg.lookup("GestaoReceitas");
		} catch (RemoteException e) {
			e.printStackTrace();
		} catch (NotBoundException e) {
			e.printStackTrace();
		}
		g = new Gestao_Impl();
		this.ficheiro = nomeficheiro;
		BufferedReader br = new BufferedReader (new FileReader (this.ficheiro));
		StringTokenizer st = null;
		String teste;
		while((teste = br.readLine()) != null){
			st = new StringTokenizer(teste, ";");
			int li= Integer.parseInt(st.nextToken());
			f = g.cria_farmacia(li);
			String nome = st.nextToken();
			f.set_nome(nome);
			String mor=st.nextToken();
			f.set_morada(mor);
			int nif= Integer.parseInt(st.nextToken());
			f.set_nif(nif);
			imprimeinfo();
		}
	}

	public static void main(String[] args){
		if(args[0].equals("-v")){
			new CriarFarmacias(Integer.parseInt(args[1]),args[2],args[3],Integer.parseInt(args[4]));
			imprimeinfo();
			System.exit(0);
		}
		else if (args[0].equals("-f")){
			try {
				new CriarFarmacias(args[1]);
				System.exit(0);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		else if(args[0].equals("-i")){
			CriarFarmacias cf = new CriarFarmacias();
			CriarFarmacias.criar();
			CriarFarmacias.resposta();
		}
		else System.out.println("Atributos Incorrectos");
	}
	
	private static void imprimeinfo(){
		try {
			System.out.println(f.get_nlicenca()+" "+f.get_nome()+" "+f.get_morada()+" "+f.get_nif());
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}
	
	private static void criar(){
		try {			
			System.out.println("Inserir nº licença:");
			int a = Integer.parseInt(in.nextLine());
			f = g.cria_farmacia(a);
		} catch (RemoteException e) {
			System.out.println("Falha de Ligação");
			e.printStackTrace();
		}		
	}

	private static void inserirnome() {
		System.out.println("Insira o nome:");
		String nome = in.nextLine();
		try {
			f.set_nome(nome);
			System.out.println("Informação Actuaizada!!");
		} catch (RemoteException e) {
			e.getStackTrace();
		}
	}

	private static void inserirmorada() {
		System.out.println("Insira morada:");
		String mor = in.nextLine();
		try {
			f.set_morada(mor);
			System.out.println("Informação Actuaizada!!");
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	private static void inserirnif() {
		System.out.println("Insira nif:");
		int nif = Integer.parseInt(in.nextLine());
		try {
			f.set_nif(nif);
			System.out.println("Informação Actuaizada!!");
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	private static void info() {
		System.out.println("Deseja Alterar alguma informação:");
		System.out.println("1 - nome");
		System.out.println("2 - morada");
		System.out.println("3 - nif");
		System.out.println("4 - ver dados");
		System.out.println("5 - sair");
	}
	
	private static void resposta(){
	info();
	int a=0;
	try{
	a = Integer.parseInt(in.nextLine());
	switch(a){
	case 1:
		inserirnome();
		resposta();
		break;
	case 2:
		inserirmorada();
		resposta();
		break;
	case 3:
		inserirnif();
		resposta();
		break;
	case 4:
		imprimeinfo();
		resposta();
		break;
	case 5:
		System.exit(0);
		break;
	default:
		resposta();
		break;
	}
	}catch(java.lang.NumberFormatException e){
		System.out.println("Opccao invalida!!!!");
		resposta();
	}
}
	
}
